<?php
namespace Install\Controller;

use Think\Controller;

class IndexController extends Controller
{
    public function __construct()
    {
        parent::__construct();
        $this->lock = CONFIG_PATH . 'install.lock';
        if (is_file($this->lock)) {
            $this->redirect("../Admin/Index/index");
        }
    }

    /**
     * 主页
     */
    public function index()
    {
        $this->display();
    }

    /**
     * 安装环境检测
     */
    public function setup1()
    {
        $this->assign('check_env', check_env());
        $this->assign('check_func', check_func());
        $this->assign('check_dirfile', check_dirfile());
        $this->display();
    }

    /**
     * 安装程序
     */
    public function setup2()
    {
        $this->display();
    }

    /**
     * 开始安装
     */
    public function setup3()
    {
        $this->display();
        //检测信息
        $data = request('post.');
        if (!$data['DB_HOST']) {
            show_msg('请填写数据库地址！', false);
        }
        if (!$data['DB_PORT']) {
            show_msg('请填写数据库端口！', false);
        }
        if (!$data['DB_NAME']) {
            show_msg('请填写数据库名称！', false);
        }
        if (!$data['DB_USER']) {
            show_msg('请填写数据库用户名！', false);
        }
        if (!$data['DB_PREFIX']) {
            show_msg('请填写数据表前缀！', false);
        }
        if (!$data['USERNAME']) {
            show_msg('请填写用户名/邮箱！', false);
        }
        if (!$data['PASSWORD']) {
            show_msg('请填写密码！', false);
        }
        if (!$data['PASSWORD2']) {
            show_msg('请填写重复密码！', false);
        }
        if ($data['PASSWORD'] != $data['PASSWORD2']) {
            show_msg('重复密码不匹配！', false);
        }
        //检查数据库
        $link = @mysql_connect($data['DB_HOST'] . ':' . $data['DB_PORT'], $data['DB_USER'], $data['DB_PWD']);
        if (!$link) {
            show_msg('数据库连接失败，请检查连接信息是否正确！', false);
        }
        $mysqlInfo = mysql_get_server_info($link);
        if ($mysqlInfo < '5.1.0') {
            show_msg('mysql版本低于5.1，无法继续安装！', false);
        }

        $status = @mysql_select_db($data['DB_NAME'], $link);
        if (!$status) {
            //尝试创建数据库
            $sql = "CREATE DATABASE IF NOT EXISTS `" . $data['DB_NAME'] . "` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;";
            if (!mysql_query($sql)) {
                show_msg('数据库' . $data['DB_NAME'] . '自动创建失败，请手动建立数据库！', false);
            }
            mysql_select_db($data['DB_NAME'], $link);
        }
        show_msg('数据库检查创建完成...');

        //修改数据库文件
        $file = CONFIG_PATH . 'db.php';
        if (save_config($file, $data)) {
            show_msg('配置数据库信息完成...');
        } else {
            show_msg('配置数据库信息失败！请手动修改[' . $file . ']文件！', false);
        }

        //安装数据库
        $file = CONFIG_PATH . 'install.sql';
        $sqlData = \Install\Common\Install::mysql($file, 'wemall_', $data['DB_PREFIX']);
        foreach ($sqlData as $sql) {
            $rst = mysql_query($sql);
            if ($rst === false) {
                show_msg(mysql_error(), false);
            }
        }

        //创建超级管理员
        $config = require CONFIG_PATH . 'db.php';
        M("User", $config['DB_PREFIX'], $config)->where(array("id" => 1))->save(array("username" => $data["USERNAME"], "password" => md5($data["PASSWORD"])));
        show_msg('超级管理员创建完成...');

        //创建文件锁
        file_put_contents($this->lock, NOW_TIME);
        //安装完毕
        show_msg('安装程序执行完毕！重新安装需要删除Public/Conf/install.lock');
        $adminUrl = U('../Admin/Index/index');
        echo "<script type=\"text/javascript\">insok(\"{$adminUrl}\")</script>";
    }


    /**
     * 生成code
     */
    public function getCode($length = 5)
    {
        $str = '1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
        $result = '';
        $l = strlen($str) - 1;
        $num = 0;

        for ($i = 0; $i < $length; $i++) {
            $num = rand(0, $l);
            $a = $str[$num];
            $result = $result . $a;
        }
        return $result;
    }
}